"""
张量的排序
主要的排序方法包括
tf.sort() 按照升序或者降序队长梁进行排序，返回排序后的张量
tf.argsort() 按照升序或者降序对张量进行排序，但是返回的是索引
tf.nn.top_k() 返回前K个最大值


tf.sort/argsort(input, direction, axis)
input 输入张量
direction 排列顺序 DESCENDING 降序  ASCENDING 升序 ， 默认为升序ASCENDING
axis 按照axis维度进行排序默认 axis=-1 最后一个维度
"""

import tensorflow as tf
import numpy as np

sort_sample_1 = tf.random.shuffle(tf.range(10))
print("输入张量", sort_sample_1.numpy())

sorted_sample_1 = tf.sort(sort_sample_1,direction="ASCENDING")
print("升序排列后的张量", sorted_sample_1.numpy())

sorted_sample_2 = tf.argsort(sort_sample_1,direction="ASCENDING")
print("升序排列后，元素的索引", sorted_sample_2.numpy())

"""
tf.nn.top_k(input, K, sorted=TRUE)
input 输入张量
K 需要输出的前K个值以及其索引
sorted  TRUE 升序，FALSE 降序

返回的话是两个张量
value 也就是每一行最大的K个数字
indices 这里的下包是在输入的张量的最后一个维度的下标
 
"""
sort_sample_2 = tf.random.shuffle(tf.range(10))

values, index = tf.nn.top_k(sort_sample_2, 5)
print("输入张量", sort_sample_2.numpy())

print("升序排列后的前5个数值", values.numpy())

print("升序排列后的前5个数值的索引",index.numpy())
